const Koa = require('koa');
const router = require('koa-router')();
const path = require('path');
const koaNunjucks = require('koa-nunjucks-2');
const static = require('koa-static');
const bodyParser = require('koa-bodyparser');
const Koa_Session = require('koa-session');   // 导入koa-session
const opn = require('opn');   // 导入koa-session


// 配置
const session_signed_key = ["some secret hurr"];  // 这个是配合signed属性的签名key
const session_config = {
  key: 'koa:sess', /**  cookie的key。 (默认是 koa:sess) */
  maxAge: 1000 * 3600,   /**  session 过期时间，以毫秒ms为单位计算 。*/
  autoCommit: true, /** 自动提交到响应头。(默认是 true) */
  overwrite: true, /** 是否允许重写 。(默认是 true) */
  httpOnly: true, /** 是否设置HttpOnly，如果在Cookie中设置了"HttpOnly"属性，那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息，这样能有效的防止XSS攻击。  (默认 true) */
  signed: true, /** 是否签名。(默认是 true) */
  rolling: true, /** 是否每次响应时刷新Session的有效期。(默认是 false) */
  renew: false, /** 是否在Session快过期时刷新Session的有效期。(默认是 false) */
};



const config = require('./config/config.js');


// 引入路由模块
const index = require('./routes/index.js');
const admin = require('./routes/admin.js');
const api = require('./routes/api.js');

const app = new Koa();


// 配置模板引擎
app.use(koaNunjucks({
  ext: 'html',
  path: path.join(__dirname,'views'),
  nunjucksConfig: {
    trimBlocks: true
  }
}));



const session = Koa_Session(session_config, app);
app.keys = session_signed_key;

// 配置session 中间件
app.use(session);

//配置post bodyparser的中间件
app.use(bodyParser());


// 静态资源
app.use(static(__dirname+'/static'));


// 配置路由
router.use(index);
router.use('/' + config.admin, admin);
router.use('/api', api);


//启动路由
app.use(router.routes()).use(router.allowedMethods());

app.listen(config.port);
var uri = "http://localhost:" + config.port;
console.log("Listening at " + uri);
// 启动浏览器
// console.log(Array.from(process.argv).slice(2));
var args = process.argv.slice(2);
if(args.indexOf("--open") > -1 || args.indexOf("--o") > -1){
  opn(uri);
}